broadway: Add raise/lower ops
authorAlexander Larsson <alexl@redhat.com>
Tue, 12 Nov 2013 11:23:58 +0000 (12:23 +0100)
committerAlexander Larsson <alexl@redhat.com>
Tue, 12 Nov 2013 11:23:58 +0000 (12:23 +0100)
gdk/broadway/broadway-output.c
gdk/broadway/broadway-output.h
gdk/broadway/broadway-protocol.h
gdk/broadway/broadway-server.c
gdk/broadway/broadway-server.h
gdk/broadway/broadway.js

index e77be3355b035a87fb45b8e624d706aa6b23e5ac..42ad59f050e912fd6599b399100180aade86121a 100644 (file)
@@ -216,6 +216,20 @@ broadway_output_hide_surface(BroadwayOutput *output,  int id)
   append_uint16 (output, id);
 }
 
+void
+broadway_output_raise_surface(BroadwayOutput *output,  int id)
+{
+  write_header (output, BROADWAY_OP_RAISE_SURFACE);
+  append_uint16 (output, id);
+}
+
+void
+broadway_output_lower_surface(BroadwayOutput *output,  int id)
+{
+  write_header (output, BROADWAY_OP_LOWER_SURFACE);
+  append_uint16 (output, id);
+}
+
 void
 broadway_output_destroy_surface(BroadwayOutput *output,  int id)
 {
index 88841ea0dc711498fb61fad6ff1666373f5286d1..6d6bb61b3164cf9f74b450a4dd0a833d4c77cd9e 100644 (file)
@@ -37,6 +37,10 @@ void            broadway_output_show_surface    (BroadwayOutput *output,
                                                 int             id);
 void            broadway_output_hide_surface    (BroadwayOutput *output,
                                                 int             id);
+void            broadway_output_raise_surface   (BroadwayOutput *output,
+                                                 int             id);
+void            broadway_output_lower_surface   (BroadwayOutput *output,
+                                                 int             id);
 void            broadway_output_destroy_surface (BroadwayOutput *output,
                                                 int             id);
 void            broadway_output_move_resize_surface (BroadwayOutput *output,
index d42625f0777f77db452054d5f9445ddbe5cbdaf5..5fffd6c3f06868131d593edfa06be9731fcd60f5 100644 (file)
@@ -31,6 +31,8 @@ typedef enum {
   BROADWAY_OP_NEW_SURFACE = 's',
   BROADWAY_OP_SHOW_SURFACE = 'S',
   BROADWAY_OP_HIDE_SURFACE = 'H',
+  BROADWAY_OP_RAISE_SURFACE = 'r',
+  BROADWAY_OP_LOWER_SURFACE = 'R',
   BROADWAY_OP_DESTROY_SURFACE = 'd',
   BROADWAY_OP_MOVE_RESIZE = 'm',
   BROADWAY_OP_SET_TRANSIENT_FOR = 'p',
index ae88cce40f97137e282f3640804f82a69739e3e8..30b232d31fc41137870d71adaf622c3d82131730 100644 (file)
@@ -1359,6 +1359,42 @@ broadway_server_window_hide (BroadwayServer *server,
   return sent;
 }
 
+void
+broadway_server_window_raise (BroadwayServer *server,
+                              gint id)
+{
+  BroadwayWindow *window;
+
+  window = g_hash_table_lookup (server->id_ht,
+                               GINT_TO_POINTER (id));
+  if (window == NULL)
+    return;
+
+  server->toplevels = g_list_remove (server->toplevels, window);
+  server->toplevels = g_list_append (server->toplevels, window);
+
+  if (server->output)
+    broadway_output_raise_surface (server->output, window->id);
+}
+
+void
+broadway_server_window_lower (BroadwayServer *server,
+                              gint id)
+{
+  BroadwayWindow *window;
+
+  window = g_hash_table_lookup (server->id_ht,
+                               GINT_TO_POINTER (id));
+  if (window == NULL)
+    return;
+
+  server->toplevels = g_list_remove (server->toplevels, window);
+  server->toplevels = g_list_prepend (server->toplevels, window);
+
+  if (server->output)
+    broadway_output_lower_surface (server->output, window->id);
+}
+
 void
 broadway_server_window_set_transient_for (BroadwayServer *server,
                                          gint id, gint parent)
@@ -1646,7 +1682,7 @@ broadway_server_new_window (BroadwayServer *server,
                       GINT_TO_POINTER (window->id),
                       window);
 
-  server->toplevels = g_list_prepend (server->toplevels, window);
+  server->toplevels = g_list_append (server->toplevels, window);
 
   if (server->output)
     broadway_output_new_surface (server->output,
index e5a3718beadbacb31530458de49a6c3f4f265433..c073c982bce41c5cd4add270e50da88a7906c744 100644 (file)
@@ -58,6 +58,10 @@ gboolean            broadway_server_window_show              (BroadwayServer   *
                                                              gint              id);
 gboolean            broadway_server_window_hide              (BroadwayServer   *server,
                                                              gint              id);
+void                broadway_server_window_raise             (BroadwayServer   *server,
+                                                             gint              id);
+void                broadway_server_window_lower             (BroadwayServer   *server,
+                                                             gint              id);
 void                broadway_server_window_set_transient_for (BroadwayServer   *server,
                                                              gint              id,
                                                              gint              parent);
index ef0470fac0c2082c2b426b3fa14596c6b1546170..c2d03b19c209195292c3b3ab7744017a3f50af3d 100644 (file)
@@ -254,12 +254,6 @@ function moveToHelper(surface, position) {
     }
 }
 
-function moveToTop(surface) {
-    moveToHelper(surface);
-    restackWindows();
-}
-
-
 function cmdDeleteSurface(id)
 {
     if (grab.window == id)
@@ -305,6 +299,22 @@ function cmdMoveResizeSurface(id, has_pos, x, y, has_size, w, h)
     sendConfigureNotify(surface);
 }
 
+function cmdRaiseSurface(id)
+{
+    var surface = surfaces[id];
+
+    moveToHelper(surface);
+    restackWindows();
+}
+
+function cmdLowerSurface(id)
+{
+    var surface = surfaces[id];
+
+    moveToHelper(surface, 0);
+    restackWindows();
+}
+
 function copyRect(src, srcX, srcY, dest, destX, destY, width, height)
 {
     // Clip to src
@@ -592,6 +602,16 @@ function handleCommands(cmd)
            cmdMoveResizeSurface(id, has_pos, x, y, has_size, w, h);
            break;
 
+       case 'r': // Raise a surface
+           id = cmd.get_16();
+           cmdRaiseSurface(id);
+           break;
+
+       case 'R': // Lower a surface
+           id = cmd.get_16();
+           cmdLowerSurface(id);
+           break;
+
        case 'b': // Put image buffer
            id = cmd.get_16();
            w = cmd.get_16();